package com.spring.rabbitmq.helloworld;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.MessageProperties;
import com.spring.rabbitmq.utils.RabbitMQUtils;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.junit.Test;

import java.io.IOException;

/**
 * @Author: lzx
 * @Data: 2021/04/26/16:29
 * @Description：
 */
@Slf4j
public class Product {
    @Test
    @SneakyThrows
    public void testSendMsg() {
/*        //创建连接工厂对象
        ConnectionFactory factory = new ConnectionFactory();
        //设置连接主机
        factory.setHost("ali");
        //设置连接端口
        factory.setPort(5672);
        //设置连接用户名、密码
        factory.setUsername("lingzx");
        factory.setPassword("lingzx");
        //设置连接虚拟主机
        factory.setVirtualHost("/elasticsearch");
        //获取连接对象
        Connection connection = factory.newConnection();*/

        //通过工具获取连接对象
        Connection connection = RabbitMQUtils.getConnection();
        //获取连接中的通道
        Channel channel = connection.createChannel();
        String queue = "hello";
        //通道绑定对应的消息队列
        // 参数0: 队列名，如果不存在自动创建
        // 参数1: durable 队列是否持久化
        // 参数2: exclusive 是否独占队列 ,建议使用不独占
        // 参数3: autoDelete 队列是否在消费完成后(且断开)自动删除
        // 参数4: 其他属性
        channel.queueDeclare("bb", true, false, true, null);

        //发布消息 到具体的队列
        //参数0： 交换机名称 参数1： 队列名称 参数2： 传递消息额外设置,可以设置消息持久化 参数3： 消息的具体内容
        log.info("直连模式");
        channel.basicPublish("", "bb", MessageProperties.PERSISTENT_TEXT_PLAIN, "hello rabbitmq".getBytes());

        //发布消息 work_queues 任务模式
        /*work_queues(channel);*/

        /*channel.close();
        connection.close();*/

        //调用工具类 关闭连接
        RabbitMQUtils.closeConnectionAndChannel(connection, channel);

    }

    //直连模式
    @SneakyThrows
    private static void direct(Channel channel) {
        channel.basicPublish("", "hello", null, "hello rabbitmq".getBytes());
    }

    //任务模式
    private static void work_queues(Channel channel) throws IOException {
        for (int i = 0; i < 10; i++) {
            channel.basicPublish("", "hello", null, (i + "====>:我是消息").getBytes());
        }
    }


}
